package com.sky.controller.admin.statistics;

import com.sky.dto.BorrowingTrendQueryDTO;
import com.sky.result.Result;
import com.sky.service.BorrowingTrendService;
import com.sky.vo.BorrowingTrendVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 借阅趋势统计控制器
 * 提供图书借阅数量趋势的统计分析功能
 * 支持按日、周、月统计，支持同比和环比分析
 */
@RestController
@RequestMapping("/admin/api/statistics")
@Api(tags = "借阅趋势统计相关接口")
@Slf4j
public class BorrowingTrendController {

    @Autowired
    private BorrowingTrendService borrowingTrendService;

    /**
     * 获取借阅趋势统计数据
     *
     * @param timeUnit 时间单位：
     *                - day: 按日统计，返回最近7天数据
     *                - week: 按周统计，返回最近4周数据
     *                - month: 按月统计，返回最近6个月数据
     * @param compareType 对比类型：
     *                  - yoy: 同比（与去年同期比较）
     *                  - mom: 环比（与上一周期比较）
     * @return 包含以下数据的统计结果：
     *         - xAxis: 时间轴数据
     *         - current: 当前周期数据
     *         - compare: 对比周期数据
     */
    @GetMapping("/borrowing-trend/{timeUnit}/{compareType}")
    @ApiOperation("获取借阅趋势统计数据")
    public Result<BorrowingTrendVO> getBorrowingTrend(
            @ApiParam(value = "时间单位", required = true, allowableValues = "day,week,month")
            @PathVariable String timeUnit,
            @ApiParam(value = "对比类型", required = true, allowableValues = "yoy,mom")
            @PathVariable String compareType) {
        BorrowingTrendQueryDTO queryDTO = new BorrowingTrendQueryDTO();
        queryDTO.setTimeUnit(timeUnit);
        queryDTO.setCompareType(compareType);

        log.info("获取借阅趋势统计数据：{}", queryDTO);
        BorrowingTrendVO trendVO = borrowingTrendService.getBorrowingTrend(queryDTO);
        return Result.success(trendVO);
    }
}